home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 9 / FM Towns Free Software Collection 9.iso / t_os / tool / vdgear / src / main.c < prev    next >
Text File  |  1994-11-16  |  9KB  |  460 lines

  1. /*
  2.  *    VIDEO・GEAR
  3.  *    "main.c"
  4.  *    by Good-Chy
  5.  */
  6.  
  7. #define    MAIN
  8. #include    "video.h"
  9.  
  10. void    TM_main();
  11.  
  12. void    title_print()
  13.     {
  14.     set_palette(9,0,0,0);
  15.     sprint("easy operation video effecter",204,222,9,0,16,16,1);
  16.     sprint("---  VIDEO GEAR  ---",204,240,9,0,16,16,1);
  17.     sprint("for FM-Towns 1993 by Good-Chy",204,258,9,0,16,16,1);
  18.     }
  19.  
  20. void    all_clear()                /* デ-タの初期化 */
  21.     {
  22.     int    i;
  23.  
  24.     for (i=0 ; i<48 ; i++)
  25.         {
  26.         data[i].effect.flag = 0;
  27.         data[i].picture.flag = 0;
  28.         data[i].cd.flag = 0;
  29.         data[i].sound.flag = 0;
  30.         data[i].mixing.flag = 0;
  31.         }
  32.     }
  33.  
  34. void    all_clear_sub()
  35.     {
  36.     close();
  37.     all_clear();
  38.     step_print();
  39.     }
  40.  
  41. void    all_clear_win()
  42.     {
  43.     con_win(1);
  44.     }
  45.  
  46. void select()
  47.     {
  48.     close();
  49.  
  50.     switch((win[0].last->number)%5)
  51.         {
  52.         case    0:    video_win();    break;
  53.         case    1:    picture();        break;
  54.         case    2:    cd_win();        break;
  55.         case    3:    sound_win();    break;
  56.         case    4:    mixing();        break;
  57.         }
  58.     }
  59.  
  60. void    els()
  61.     {
  62.     int    stp;
  63.  
  64.     stp = step + (win[0].last->number)/5;
  65.  
  66.     switch((win[0].last->number)%5)
  67.         {
  68.         case    0:data[stp].effect.flag  = 0;        break;
  69.         case    1:data[stp].picture.flag = 0;        break;
  70.         case    2:data[stp].cd.flag      = 0;        break;
  71.         case    3:data[stp].sound.flag   = 0;        break;
  72.         case    4:data[stp].mixing.flag  = 0;        break;
  73.         }
  74.     close();
  75.     step_print();
  76.     }
  77.  
  78. void    inst()                /* 挿入 */
  79.     {
  80.     int    i,stp,dx,dy;
  81.     char    *p;
  82.  
  83.     setmos(82);
  84.  
  85.     stp = step + (win[0].last->number)/5;
  86.  
  87.     for (i=46 ; i>=stp ; i--)
  88.         {
  89.         switch((win[0].last->number)%5)
  90.             {
  91.             case    0:        /* ビデオ画像 */
  92.                 {
  93.                 memcpy( &data[i+1].effect,    &data[i].effect,
  94.                                         sizeof(EFFECT));
  95.                 break;
  96.                 }
  97.  
  98.             case    1:        /* パソコン画像 */
  99.                 {
  100.                 memcpy( &data[i+1].picture,    &data[i].picture,
  101.                                         sizeof(PICTURE));
  102.                 EGB_writePage(egb_work,0x81);
  103.                 dx = i % 8 * 40;
  104.                 dy = i / 8 * 30+60;
  105.                 p = get_vram(32,dx,dy,dx+39,dy+29);
  106.                 dx = (i+1) % 8 * 40;
  107.                 dy = (i+1) / 8 * 30+60;
  108.                 put_vram(p,dx,dy,dx+39,dy+29);
  109.                 free(p);
  110.                 EGB_writePage(egb_work,0);
  111.                 break;
  112.                 }
  113.  
  114.             case    2:        /* CD */
  115.                 {
  116.                 memcpy( &data[i+1].cd,        &data[i].cd,
  117.                                         sizeof(CD));
  118.                 break;
  119.                 }
  120.  
  121.             case    3:        /* 効果音 */
  122.                 {
  123.                 memcpy( &data[i+1].sound,    &data[i].sound,
  124.                                         sizeof(SOUND));
  125.                 break;
  126.                 }
  127.  
  128.             case    4:        /* ミキシング */
  129.                 {
  130.                 memcpy( &data[i+1].mixing,    &data[i].mixing,
  131.                                         sizeof(MIXING));
  132.                 break;
  133.                 }
  134.  
  135.             }
  136.         }
  137.     els();
  138.     setmos(81);
  139.     }
  140.  
  141. void    del()                    /* 削除 */
  142.     {
  143.     int    i,stp,dx,dy;
  144.     char    *p;
  145.  
  146.     setmos(82);
  147.     close();
  148.  
  149.     stp = step + (win[0].last->number)/5;
  150.  
  151.     for (i=stp ; i<47 ; i++)
  152.         {
  153.         switch((win[0].last->number)%5)
  154.             {
  155.             case    0:        /* ビデオ画像 */
  156.                 {
  157.                 memcpy( &data[i].effect,    &data[i+1].effect,
  158.                                         sizeof(EFFECT));
  159.                 data[47].effect.flag = 0;
  160.  
  161.                 break;
  162.                 }
  163.  
  164.             case    1:        /* パソコン画像 */
  165.                 {
  166.                 memcpy( &data[i].picture,    &data[i+1].picture,
  167.                                         sizeof(PICTURE));
  168.                 data[47].picture.flag = 0;
  169.  
  170.                 EGB_writePage(egb_work,0x81);
  171.                 dx = (i+1) % 8 * 40;
  172.                 dy = (i+1) / 8 * 30+60;
  173.                 p = get_vram(32,dx,dy,dx+39,dy+29);
  174.                 dx = i % 8 * 40;
  175.                 dy = i / 8 * 30+60;
  176.                 put_vram(p,dx,dy,dx+39,dy+29);
  177.                 free(p);
  178.                 EGB_writePage(egb_work,0);
  179.                 break;
  180.                 }
  181.  
  182.             case    2:        /* CD */
  183.                 {
  184.                 memcpy( &data[i].cd,        &data[i+1].cd,
  185.                                         sizeof(CD));
  186.                 data[47].cd.flag = 0;
  187.  
  188.                 break;
  189.                 }
  190.  
  191.             case    3:        /* 効果音 */
  192.                 {
  193.                 memcpy( &data[i].sound,        &data[i+1].sound,
  194.                                         sizeof(SOUND));
  195.                 data[47].sound.flag = 0;
  196.  
  197.                 break;
  198.                 }
  199.  
  200.             case    4:        /* ミキシング */
  201.                 {
  202.                 memcpy( &data[i].mixing,    &data[i+1].mixing,
  203.                                         sizeof(MIXING));
  204.                 data[47].mixing.flag = 0;
  205.  
  206.                 break;
  207.                 }
  208.  
  209.             }
  210.         }
  211.     setmos(81);
  212.     step_print();
  213.     }
  214.  
  215. void    menu()
  216.     {
  217.     BUTTON    *p;
  218.     int    vx, vy;
  219.  
  220.     vx = win[active].last->bx+2;
  221.     vy = win[active].last->dy+2;
  222.     p = window_open(vx,vy,74,94,0,0);
  223.     p = create(p, 6, 6,62,15,1,select);
  224.     p = create(p, 6,22,62,15,1,inst);
  225.     p = create(p, 6,38,62,15,1,els);
  226.     p = create(p, 6,54,62,15,1,del);
  227.     p = create(p,34,72,31,17,0,close);
  228.     }
  229.  
  230. void    _load()
  231.     {
  232.     file_sel(0);
  233.     }
  234.  
  235. void    _save()
  236.     {
  237.     file_sel(1);
  238.     }
  239.  
  240. void    file_win()            /* ファイル選択ウィンドウ */
  241.     {
  242.     BUTTON    *p;
  243.  
  244.     p = window_open(545,40,61,63,578,0);
  245.     p = create(p, 6, 6,49,15,1,_load);
  246.     p = create(p, 6,23,49,15,1,_save);
  247.     p = create(p,21,41,31,17,0,close);
  248.     }
  249.  
  250. void    mixing_print(int stp, int vx)
  251.     {
  252.     if (data[stp].mixing.flag == 1)
  253.         {
  254.         sprint("設定あり",vx*89+110,359,15,0,16,16,1);
  255.         }
  256.     }
  257.  
  258. void    step_print()
  259.     {
  260.     int    i;
  261.     int    dx;
  262.     EGB_paintMode(egb_work,0x22);
  263.     EGB_writePage(egb_work,0);
  264.     for (i=0 ; i<5 ; i++)
  265.         {
  266.         box_full(i*89+130,89,i*89+153,101,1,1,0);
  267.         sprintusing(step+i+1,2,i*89+129,101,15,8,24,12,4);
  268.  
  269.         EGB_writePage(egb_work,1);
  270.         dx = (i*89+102)/2;
  271.         box_full(dx,56,dx+39,85,0,0,0);        /* エフェクト消去 */
  272.         box_full(dx,91,dx+39,120,0,0,0);        /* ピクチャ-消去 */
  273.         EGB_writePage(egb_work,0);
  274.         box_full(102+i*89,252,181+i*89,283,0,0,0);/* CD消去 */
  275.         box_full(102+i*89,294,181+i*89,325,0,0,0);/* 効果音消去 */
  276.         box_full(102+i*89,336,181+i*89,367,0,0,0);/* ミキシング消去 */
  277.  
  278.         if (data[step+i].effect.flag == 1)
  279.             { effect_print(data[step+i].effect.effect-1,dx,56); }
  280.  
  281.         if (data[step+i].picture.flag == 1)
  282.             { picture_print(step+i,dx,91); }
  283.  
  284.         if (data[step+i].cd.flag == 1)
  285.             { cd_print(i); }
  286.  
  287.         if (data[step+i].sound.flag == 1)
  288.             { sound_print(i); }
  289.  
  290.         if (data[step+i].mixing.flag == 1)
  291.             { sprint("設定あり",i*89+110,359,15,0,16,16,1); }
  292.         }
  293.     }
  294.  
  295. void    search()
  296.     {
  297.     int    sw;
  298.     sw = win[active].last->number; 
  299.     switch(sw)
  300.         {
  301.         case    25 : step -= 5 ;    break;
  302.         case    26 : step --   ;    break;
  303.         case    27 : step ++   ;    break;
  304.         case    28 : step += 5 ;    break;
  305.         }
  306.     if (step< 0)    { step =  0; }
  307.     if (step>43)    { step = 43; }
  308.  
  309.     step_print();
  310.     }
  311.  
  312. void    main(int ac, char *av[])
  313.     {
  314.     TM_main();
  315.  
  316.     int    i;
  317.     BUTTON    *ret, *push;
  318.     int    button, mos_x, mos_y;
  319.     int    count, glab, interval;
  320.     active = 0; step = 0; key_flag = 0;
  321.     work_path = NULL;
  322.  
  323.     char    *p;                /* パラメ-タの設定 */
  324.     av_flag = 0;
  325.     sp_light = 0x81;
  326.     fade_speed = 1;
  327.     effect_speed = 1;
  328.     while ( --ac > 0 )
  329.         {
  330.         p = *(++av);
  331.         if ( *p == '/' )
  332.             {
  333.             switch(*(++p))
  334.                 {
  335.                 case 'M': case 'm': av_flag = 1;            break;
  336.                 case 'D': case 'd': sp_light = 0x80;        break;
  337.                 case 'F': case 'f': fade_speed = atoi(++p);    break;
  338.                 case 'E': case 'e': effect_speed = atoi(++p);    break;
  339.                 }
  340.             }
  341.         }
  342.  
  343.     screen1();
  344.     SND_init(snd_work);
  345.     MOS_start(mos_work,4096);
  346.     snd_init();
  347.     mos_init();
  348.     kana_init();
  349.     title_print();
  350.     for (i=0 ; i<256 ; i+=2)        { set_palette(9,i,i,i); }
  351.  
  352.     toc_read();
  353.     work_path = _getcwd(work_path,255);
  354.     snd_bp = malloc(1);
  355.     main_screen_load();
  356.  
  357.     all_clear();
  358.     step_print();
  359.  
  360.     ret = (BUTTON *)malloc(sizeof(BUTTON));    /* ベ-スのボタン作成 */
  361.     win[active].item = ret;
  362.     win[active].wx = 0;
  363.     win[active].wy = 0;
  364.     win[active].item->number = 0;
  365.  
  366.     for (i=0 ; i<5 ; i++)
  367.         {
  368.         ret = create(ret, 102+i*89, 112, 79, 59, 1, menu);
  369.         ret = create(ret, 102+i*89, 182, 79, 59, 1, menu);
  370.         ret = create(ret, 102+i*89, 252, 79, 31, 1, menu);
  371.         ret = create(ret, 102+i*89, 294, 79, 31, 1, menu);
  372.         ret = create(ret, 102+i*89, 336, 79, 31, 1, menu);
  373.         }
  374.  
  375.     ret = create(ret, 404, 393, 30, 30, 0,search);
  376.     ret = create(ret, 444, 393, 30, 30, 0,search);
  377.     ret = create(ret, 484, 393, 30, 30, 0,search);
  378.     ret = create(ret, 524, 393, 30, 30, 0,search);
  379.     ret = create(ret, 480,   9, 30, 30, 0,all_clear_win);
  380.     ret = create(ret, 520,   9, 30, 30, 0,play);
  381.     ret = create(ret, 560,   9, 30, 30, 0,file_win);
  382.     ret = create(ret, 600,   9, 30, 30, 0,close);
  383.  
  384.     count = 0;
  385.     glab = 0;
  386.     interval = 0;
  387.  
  388.     for (;;)
  389.         {
  390.         MOS_rdpos(&button, &mos_x, &mos_y);
  391.  
  392.         if (key_flag == 1)
  393.             {
  394.             line_input();
  395.             }
  396.  
  397.         if ((button & 1) == 1)
  398.             {
  399.             if (count == 0)
  400.                 {
  401.                 count = 1;
  402.                 ret = check_button(mos_x, mos_y);
  403.                 push = ret;
  404.                 if (ret != NULL)
  405.                     {
  406.                     drow(push);
  407.                     glab = 1;
  408.                     }
  409.                 }
  410.             else
  411.                 {
  412.                 ret = check_button(mos_x, mos_y);
  413.                 if ((glab == 1) && (push != ret))
  414.                     {
  415.                     drow(push);
  416.                     glab = 0;
  417.                     }
  418.  
  419.                 ret = check_button(mos_x, mos_y);
  420.                 if ((glab == 0) && (push == ret) && (ret != NULL))
  421.                     {
  422.                     drow(ret);
  423.                     glab = 1;
  424.                     }
  425.  
  426.                 if ((ret != NULL) && (glab == 1) && (ret->type == 2))
  427.                     {
  428.                     if (interval < 302)    { interval++; }
  429.                     if ((interval == 1) || (interval > 300))
  430.                         {
  431.                         win[active].last = push;
  432.                         (*(ret->function))();
  433.                         }
  434.                     }
  435.                 }
  436.             }
  437.         else
  438.             {
  439.             if (count == 1)
  440.                 {
  441.                 if ((button & 1) == 0)
  442.                     {
  443.                     count = 0;
  444.                     interval = 0;
  445.                     if (glab == 1)
  446.                         {
  447.                         glab = 0;
  448.                         win[active].last = push;
  449.                         drow(push);
  450.                         if (ret->type != 2)
  451.                             {
  452.                             (*(push->function))();
  453.                             }
  454.                         }
  455.                     }
  456.                 }
  457.             }
  458.         }
  459.     }
  460.